home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / clang / intrpt.zip / INTRPT.CPP
C/C++ Source or Header  |  1991-03-06  |  1KB  |  50 lines

  1. /************************************************************************
  2.    Example of installing an interrupt function in a C++ program.
  3. ************************************************************************/
  4. #pragma option -w -w-par
  5. #include <conio.h>
  6. #include <dos.h>
  7.  
  8. typedef void interrupt (*cast_isr) (...);
  9. void install(void interrupt (*faddr)(...), int inum);
  10. void interrupt mybeep(unsigned, unsigned, unsigned, unsigned,
  11.             unsigned, unsigned, unsigned, unsigned, unsigned);
  12. void testbeep(unsigned char bcount, int inum);
  13. //-----------------
  14. int main(void)
  15. {
  16.    install( (cast_isr)mybeep, 10);
  17.    testbeep(3,10);
  18.    cputs("beep");
  19.    return 0;
  20. }
  21. //-----------------
  22. void install(void interrupt (*faddr)(...), int inum)
  23. {
  24.     setvect(inum, faddr);
  25. }
  26. //-----------------
  27. void interrupt mybeep(unsigned bp, unsigned di, unsigned si,
  28.                       unsigned ds, unsigned es, unsigned dx,
  29.                       unsigned cx, unsigned bx, unsigned ax)
  30. {
  31.    int i, j;
  32.    char originalbits, bits;
  33.    int bcount = 2000;
  34.  
  35.    bits = originalbits = inportb(0x61);
  36.    for (i = 0; i <= bcount; i++)
  37.    {  outportb(0x61, bits & 0xfc);
  38.       for (j = 0; j <= 300; j++);
  39.       outportb(0x61, bits | 2);
  40.       for (j=0; j<=300; j++);
  41.    }
  42.    outportb(0x61, originalbits);
  43. }
  44. //-----------------
  45. void testbeep(unsigned char bcount, int inum)
  46. {
  47.    _AH = bcount;
  48.    geninterrupt(inum);
  49. }
  50.